# 使用条件判断区分操作系统
ifeq ($(OS),Windows_NT)
    # Windows 命令
    SHELL := powershell.exe
    .SHELLFLAGS := -NoProfile -ExecutionPolicy Bypass -Command

    # 定义 Windows 下的命令
    EXPORT_ENV = powershell -File export_conda_envs.ps1
    REBUILD_ENV = .\rebuild_conda_envs.bat
    CHECK_INSTALL = powershell -File check_and_install_requirements.ps1
    CREATE_ENV = .\create_conda_env.bat
    EXPORT_PIP_REQ = python export_pip_requirements.py
    UPDATE_PIP_ENV = python -m pip install -r
    UPDATE_ENV_PIP = python update_env_pip.py
    # Windows特有的交互式输入命令
    UPDATE_PIP_ENV_INTERACTIVE = powershell -Command "$$req_file = Read-Host '请输入要使用的requirements文件路径'; python -m pip install -r $$req_file"
    # 导出所有环境的pip requirements的命令
    EXPORT_ALL_PIP = powershell -File export_all_pip_reqs.ps1
else
    # Linux/Unix 命令
    SHELL := /bin/bash

    # 定义 Linux/Unix 下的命令
    EXPORT_ENV = bash ./export_conda_envs.sh
    REBUILD_ENV = bash ./rebuild_conda_envs.sh
    CHECK_INSTALL = bash ./check_and_install_requirements.sh
    CREATE_ENV = python create_conda_env.py
    EXPORT_PIP_REQ = python export_pip_requirements.py
    UPDATE_PIP_ENV = python -m pip install -r
    UPDATE_ENV_PIP = python update_env_pip.py
    # Linux特有的交互式输入命令
    UPDATE_PIP_ENV_INTERACTIVE = bash -c 'read -p "请输入要使用的requirements文件路径: " req_file && python -m pip install -r $$req_file'
    # 导出所有环境的pip requirements的命令
    EXPORT_ALL_PIP = bash ./export_all_pip_reqs.sh
endif

# 获取命令行参数
ENV_NAME ?= 

# 通用目标
.PHONY: export rebuild check create export-pip export-base-pip export-all-pip update-pip-env update-base-pip update-env-pip update-pip help

# 导出环境
export:
	$(EXPORT_ENV)

# 重建环境
rebuild:
	$(REBUILD_ENV)

# 检查并安装依赖
check:
	$(CHECK_INSTALL)

# 创建环境
create:
	$(CREATE_ENV)

# 导出pip requirements
export-pip:
	$(EXPORT_PIP_REQ)

# 导出base环境的pip requirements
export-base-pip:
	$(EXPORT_PIP_REQ) --env-name base --output conda_environments/base_pip_requirements.txt

# 导出所有环境的pip requirements
export-all-pip:
	@echo "正在导出所有环境的pip requirements..."
	$(EXPORT_ALL_PIP)

# 使用pip requirements更新当前环境
update-pip-env:
	$(UPDATE_PIP_ENV_INTERACTIVE)

# 使用base的pip requirements更新当前环境
update-base-pip:
	$(UPDATE_PIP_ENV) conda_environments/base_pip_requirements.txt

# 更新指定conda环境（交互式）
update-env-pip:
	$(UPDATE_ENV_PIP)

# 更新指定conda环境（通过命令行参数）
update-pip:
ifdef ENV_NAME
	@echo "更新环境: $(ENV_NAME)"
	$(UPDATE_ENV_PIP) --env-name $(ENV_NAME)
else
	@echo "请指定环境名称，例如: make update-pip ENV_NAME=base"
	@echo "可用的环境:"
	$(UPDATE_ENV_PIP) --list-envs
endif

# 显示帮助信息
help:
	@echo "可用命令:"
	@echo "  make export         - 导出所有conda环境到conda_environments（建议使用）"
	@echo "  make rebuild        - 重建conda环境"
	@echo "  make check          - 检查并安装必要依赖"
	@echo "  make create         - 创建新的conda环境"
	@echo "  make export-pip     - 导出环境的pip requirements（交互式）"
	@echo "  make export-base-pip - 导出base环境的pip requirements"
	@echo "  make export-all-pip - 导出所有环境的pip requirements"
	@echo "  make update-pip-env - 使用指定的pip requirements更新当前环境（交互式）"
	@echo "  make update-base-pip - 使用base环境的pip requirements更新当前环境"
	@echo "  make update-env-pip - 更新指定conda环境的包（交互式）"
	@echo "  make update-pip ENV_NAME=环境名称 - 更新指定conda环境的包"
	@echo "  make help           - 显示此帮助信息"
